package modelo;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import dao.AccidenteDAO;
import entidades.Accidente;
import entidades.AccidenteLesion;
import entidades.FormaAccidente;
import entidades.MaterialAsociado;
import entidades.Obrero;
import entidades.Proyecto;
import excepciones.FaltanCompletarCamposException;
import excepciones.FechaNoPuedeSerMayorException;


public class ModeloAccidente {
	

	public List<Accidente> obtenerListaAccidentes() throws Exception{
		return AccidenteDAO.getInstancia().obtenerListaAccidentes();
	}
	
	public void altaAccidente(Date fecha, FormaAccidente formaAccidente, MaterialAsociado materialAsociado,
			List<AccidenteLesion> accidentesLesiones, Obrero obreroAsociado, Proyecto proyecto) throws Exception,FechaNoPuedeSerMayorException, FaltanCompletarCamposException, Throwable{ 
		
		if(materialAsociado == null || formaAccidente == null || accidentesLesiones.isEmpty() ){
			throw new FaltanCompletarCamposException();
		}
		
		Calendar cal = new GregorianCalendar();
		if(fecha.after(cal.getTime())){
			throw new FechaNoPuedeSerMayorException();
		}
		
		ModeloObrero m = new ModeloObrero();
		
		Accidente a = new Accidente();
		a.setAccidentesLesiones(accidentesLesiones);
		a.setFecha(fecha);
		a.setFormaAccidente(formaAccidente);
		a.setMaterialAsociado(materialAsociado);
		a.setObreroAsociado(obreroAsociado);
		a.setProyectoAsociado(proyecto);
		
		AccidenteDAO.getInstancia().guardarUnAccidente(a);
		
		m.actualizarScorePorAccidente(obreroAsociado, proyecto);

		
	}

	public int obtenerCantAccidentesPorObrero(Obrero obreroSeleccionado, Proyecto proyectoSeleccionado) throws Exception {
		return AccidenteDAO.getInstancia().obtenerCantAccidentesPorObrero(obreroSeleccionado, proyectoSeleccionado);
	}
}
